草庐IT

c++ getline和stringstream

全部标签

c++ - 如何使用 std::in 和 getline() 在后台进程中检测从 bash 注入(inject)的输入

我有一个用Cpp编译的二进制文件,代码如下:std::stringinput;getline(std::cin,input);std::cout如果我执行此示例,并在终端中写入“Helloworld!”完美运行:Messagegiven:Helloworld!现在,我启动重定向标准输出的可执行文件:./basicsample>>output/test如果我尝试使用文件描述符注入(inject)输入:echo"Helloworld!">/proc/${PID}/fd/0消息出现在启动进程的终端中:[vgonisanz@foovarbash]$./basicsample>>output/t

c++ - 这是 getline() 的错误,还是我做错了什么。 getline() 的正确使用方法?

这可能不是一个错误,但我不知道出了什么问题。我的第一个条目在第二次迭代中对str1重复,并且从那时起也是如此。只有第一次迭代顺利。#include#includeusingnamespacestd;intmain(){cout>c;}return0;}输出是:Entertwowords.helloworldthisismrstr:helloworldstr1:thisismrContinue?yhelloworldstr:str1:helloworldContinue?n 最佳答案 添加cin.ignore(std::numeric

c++ - 您可以使用 stringstream 来安全地进行双向转换吗?

我遇到过使用字符串流将double型转换为字符串的情况。现在,我必须在其他地方取回该值(不,我无权访问原始double值),所以我必须解析格式化的字符串。当然,我也可以只用一个字符串流来读取它,但是这样安全吗?对于所有值,它总是有效吗?std::ostringstreamdoubleToString;doublemyDouble=3.14;doubleToString>newDouble;在上面的例子中,myDouble总是等于newDouble吗?注意:边际差异(0.00000000001)与我无关。 最佳答案 不,它并不总是有效

c++ - stringstream 和 nullptr 的子类

这段简单的代码可以用clang++编译,但不能用g++。里面有什么undefined吗?(需要模板函数才能让clang开心)GCC8.2.0(与-std=c++17一起使用)表示operator#include#include#includetemplateOut&&operator(out);}structA:std::stringstream{};intmain(){A{} 最佳答案 我相信这是由Bug51577引起的海湾合作委员会。您的代码导致std::__is_insertable&,std::nullptr_t&,void

c++ - 在程序中一起使用 getline 和 strtok 的问题

在下面的程序中,我打算将文件中的每一行读入一个字符串,分解字符串并显示单个单词。我面临的问题是,程序现在只输出文件中的第一行。我不明白为什么会这样?#include#include#include#includeusingnamespacestd;intmain(){ifstreamInputFile("hello.txt");stringstore;char*token;while(getline(InputFile,store)){cout 最佳答案 我是C++的新手,但我认为另一种方法可能是:while(getline(Inp

c++ - stringstream 无符号输入验证

我正在编写程序的一部分,用于解析和验证程序控制台参数中的一些用户输入。为此,我选择使用stringstream,但遇到了读取无符号类型的问题。下一个模板用于从给定字符串中读取请求的类型:#include#include#includeusingstd::string;usingstd::stringstream;usingstd::cout;usingstd::endl;templateValueTyperead_value(strings){stringstreamss(s);ValueTyperes;ss>>res;if(ss.fail()ornotss.eof())throwst

涉及 getline() 和循环的 C++ 问题

我正在做一项学校作业,现在正在用头撞墙试图弄清楚为什么我的程序没有按照我希望的那样运行!intmain(){stringinput;charchoice;boolgetChoice(char);stringgetInput();CharConverternewInput;do{cout>choice;}while(getChoice(choice)==true);return0;}这个程序在第一轮运行良好,但当getChoice()==true时我遇到了问题,并且dowhileblock被第二次循环。在第二个循环中,程序要求我再次输入一个句子,但随后直接跳转到“Wouldyoulike

使用 stringstream::str() 更新后,C++ stringstream 无法正常工作

我知道stringstream可以用stringstream::str()更新,但是如果之后我在stringstream中输入其他内容,它没有按预期工作。以下片段演示了该现象:#include#include#includeusingnamespacestd;intmain(){stringstreamss;//ostringstreamgivesthesameoutputss我希望得到输出Updatedstringsthelse但它实际上输出sthelsestring它似乎不是在当前字符串的末尾附加新输入的字符串(在我的例子中是Updatedstring),而是试图从头覆盖它。我的代

c++ - stringstream.rdbuf 导致 cout 失败

当我在某个时候添加一个cout时,我很惊讶地发现我的程序突然安静下来,所以我隔离了负责的代码:std::stringstreamdata;data程序在没有最后命令的情况下悄悄退出。到底是怎么回事?如果我将最后一个.rdbuf()改为.str()然后它就会完成。 最佳答案 在调用std::cout期间,std::cout无法从data读取任何字符的filebuf因为读取的位置在上一次输出后已经在文件末尾;accordingly,这组failbit在std::cout,并且在清除此状态之前,任何进一步的输出也将失败(即您的最后一行基本

c++ - 哪个更高效/整洁 : clearing an existing stringstream or creating a new one?

只是出于好奇而提出的简单问题。类上的多个方法需要使用字符串流,或者特别是ostringstream。1)有一个stringstream变量作为类成员,然后在使用它之前清除它,即msg.str("")2)每次需要使用时,在每个方法中本地创建一个新的stringstream变量。就效率和整洁度而言,哪种实现方式最好?我的直觉是选项1,但不确定初始构造与每次调用str()相结合是否会更糟?附言我读过Initializing..whichoneismoreefficient?和Whichisquicker/moreefficient?,我的下一步是研究分析和编写一个小的测试应用程序,但我觉得问